<?php

require_once("Model/ModelsInclude.php");

require_once("Layout/header.php");

define("SUBJECT_PAGE_NAME", "Ordini");
define("PARENT_PAGE_NAME","Statistiche");
define("PAGE_NAME","Mostra Statistica");
define("PAGE_TITLE","Visualizza Statistica");
global $pagesEditLink;

/*
 * Connessione DB.
 */
$db = new DatabaseManager();
$db->Connect();

/*
 * Stampa dell'header della pagina
 */
printHeader(PAGE_NAME, PAGE_TITLE, NULL);

if(!isset($_POST["statType"]))
{
	echo('<p style=\"color:#f00;\"><b>Parametri della richiesta non validi!</b></p>');
	include("Layout/footer.php");
	die();
}

$dateFrom = 0;
$dateTo = 0;
if(isset($_POST["DateFrom"]) && isset($_POST["DateTo"]))
{
	$dateFrom = ModelUtils::getDateFromFormRequest("DateFrom", $_POST);
	$dateTo = ModelUtils::getDateFromFormRequest("DateTo", $_POST);
}
else
{
	$dateFrom = mktime(0,0,1,date('n')-3,date('j'),date('Y'));	//3 mesi fa
	$dateTo = time();											//ora
}

?>
<div>
	<form method="POST" action="">
		<?php
		foreach($_POST as $key => $val)
		{
			if($key == "DateFrom" || $key == "DateTo")
				continue;
			echo('<input type="hidden" name="'.$key.'" value="'.$val.'" />');
		}
		?>
		Esegui statistica a partire da: <?= ModelUtils::getDateFormElement("DateFrom", $dateFrom, false) ?> &nbsp;&nbsp;&nbsp;
		fino a: <?= ModelUtils::getDateFormElement("DateTo", $dateTo, false) ?> &nbsp;&nbsp;&nbsp;
		<input type="submit" value="Aggiorna" />
	</form>
</div>
<?php

$c = Ordine::getInstance();

define("TOTALE_ORDINE_FIELD_NAME", "TotaleOrdine");
$totale = 0;
$tempOrdiniList = array();
$ordiniList = NULL;
$statLabel = "";

$statType = $_POST["statType"];
//ricerca per azienda
if($statType == "Azienda" && isset($_POST["idAzienda"]) && is_numeric($_POST["idAzienda"]))
{
	$idAzienda = (int)$_POST["idAzienda"];
	$jointTableStr = "(".Ordine::joinTable.") LEFT JOIN VariazioneArticoloOrdine ON Ordine.ID = VariazioneArticoloOrdine.idOrdine";
	$jointSelectStr = Ordine::joinSelect.", SUM(VariazioneArticoloOrdine.Totale) AS ".TOTALE_ORDINE_FIELD_NAME;
	$whereClause = "idAziendaRappresentata = ".$idAzienda." AND Data > '".Utils::dateToMySqlFormat($dateFrom)."' AND Data < '".Utils::dateToMySqlFormat($dateTo)."' GROUP BY Ordine.ID";
	$res = $db->EnumerateTableStartExt($jointSelectStr, $jointTableStr, "Data DESC", $whereClause);
	while($db->EnumerateTableNext($res))
	{
		$newObjData = $db->EnumerateTableGetValues($res);
		$tempOrdiniList[] = $c->createNew($newObjData);
		$totale += (int)$newObjData[TOTALE_ORDINE_FIELD_NAME];
	}
	$ordiniList = $tempOrdiniList;
	//etichetta descrittiva della statistica effettuata
	$statLabel = "Statistica effettuata per azienda produttrice:<br/>";
	$aziendaInst = AziendaRappresentata::getInstance()->getFromDB($db, $idAzienda);
	if($aziendaInst != NULL)
		$statLabel .= " - Azienda produttrice: <b>".$aziendaInst->getLabel()."</b>";
}
//ricerca per agente
elseif($statType == "Agente" && isset($_POST["idAgente"]) && is_numeric($_POST["idAgente"]))
{
	$idAgente = (int)$_POST["idAgente"];
	$jointTableStr = "(".Ordine::joinTable.") LEFT JOIN VariazioneArticoloOrdine ON Ordine.ID = VariazioneArticoloOrdine.idOrdine";
	$jointSelectStr = Ordine::joinSelect.", SUM(VariazioneArticoloOrdine.Totale) AS ".TOTALE_ORDINE_FIELD_NAME;
	$whereClause = "idAgente = ".$idAgente." AND Data > '".Utils::dateToMySqlFormat($dateFrom)."' AND Data < '".Utils::dateToMySqlFormat($dateTo)."' GROUP BY Ordine.ID";
	$res = $db->EnumerateTableStartExt($jointSelectStr, $jointTableStr, "Data DESC", $whereClause);
	while($db->EnumerateTableNext($res))
	{
		$newObjData = $db->EnumerateTableGetValues($res);
		$tempOrdiniList[] = $c->createNew($newObjData);
		$totale += (int)$newObjData[TOTALE_ORDINE_FIELD_NAME];
	}
	$ordiniList = $tempOrdiniList;
	//etichetta descrittiva della statistica effettuata
	$statLabel = "Statistica effettuata per agente:<br/>";
	$agenteInst = Agente::getInstance()->getFromDB($db, $idAgente);
	if($agenteInst != NULL)
		$statLabel .= " - Agente: <b>".$agenteInst->getLabel()."</b>";
}
//ricerca per tipo cliente
elseif($statType == "TipoCliente" && isset($_POST["TipoCliente"]) && is_numeric($_POST["TipoCliente"]))
{
	$tipoCliente = (int)$_POST["TipoCliente"];
	$jointTableStr = "(".Ordine::joinTableForSearchQuery.") LEFT JOIN VariazioneArticoloOrdine ON Ordine.ID = VariazioneArticoloOrdine.idOrdine";
	$jointSelectStr = Ordine::joinSelectForSearchQuery.", SUM(VariazioneArticoloOrdine.Totale) AS ".TOTALE_ORDINE_FIELD_NAME;
	$whereClause = "TipoCliente = ".$tipoCliente." AND Data > '".Utils::dateToMySqlFormat($dateFrom)."' AND Data < '".Utils::dateToMySqlFormat($dateTo)."' GROUP BY Ordine.ID";
	$res = $db->EnumerateTableStartExt($jointSelectStr, $jointTableStr, "Data DESC", $whereClause);
	while($db->EnumerateTableNext($res))
	{
		$newObjData = $db->EnumerateTableGetValues($res);
		$tempOrdiniList[] = $c->createNew($newObjData);
		$totale += (int)$newObjData[TOTALE_ORDINE_FIELD_NAME];
	}
	$ordiniList = $tempOrdiniList;
	//etichetta descrittiva della statistica effettuata
	$statLabel = "Statistica effettuata per tipologia cliente:<br/> - Tipologia cliente: <b>".Cliente::$tipoClienteList[$tipoCliente]."</b>";
}
//ricerca per tipo cliente ed azienda rappresentata
elseif($statType == "TipoCliente_Azienda" && isset($_POST["TipoCliente"]) && is_numeric($_POST["TipoCliente"]) && isset($_POST["idAzienda"]) && is_numeric($_POST["idAzienda"]))
{
	$tipoCliente = (int)$_POST["TipoCliente"];
	$idAzienda = (int)$_POST["idAzienda"];
	$jointTableStr = "(".Ordine::joinTableForSearchQuery.") LEFT JOIN VariazioneArticoloOrdine ON Ordine.ID = VariazioneArticoloOrdine.idOrdine";
	$jointSelectStr = Ordine::joinSelectForSearchQuery.", SUM(VariazioneArticoloOrdine.Totale) AS ".TOTALE_ORDINE_FIELD_NAME;
	$whereClause = "TipoCliente = ".$tipoCliente." AND idAziendaRappresentata = ".$idAzienda." AND Data > '".Utils::dateToMySqlFormat($dateFrom)."' AND Data < '".Utils::dateToMySqlFormat($dateTo)."' GROUP BY Ordine.ID";
	$res = $db->EnumerateTableStartExt($jointSelectStr, $jointTableStr, "Data DESC", $whereClause);
	while($db->EnumerateTableNext($res))
	{
		$newObjData = $db->EnumerateTableGetValues($res);
		$tempOrdiniList[] = $c->createNew($newObjData);
		$totale += (int)$newObjData[TOTALE_ORDINE_FIELD_NAME];
	}
	$ordiniList = $tempOrdiniList;
	//etichetta descrittiva della statistica effettuata
	$statLabel = "Statistica effettuata per tipologia cliente e per azienda produttrice:<br/> - Tipologia cliente: <b>".Cliente::$tipoClienteList[$tipoCliente]."</b><br/>";
	$aziendaInst = AziendaRappresentata::getInstance()->getFromDB($db, $idAzienda);
	if($aziendaInst != NULL)
		$statLabel .= " - Azienda produttrice: <b>".$aziendaInst->getLabel()."</b>";
}
//ricerca per tipo cliente ed azienda rappresentata
elseif($statType == "Agente_Azienda" && isset($_POST["idAgente"]) && is_numeric($_POST["idAgente"]) && isset($_POST["idAzienda"]) && is_numeric($_POST["idAzienda"]))
{
	$idAzienda = (int)$_POST["idAzienda"];
	$idAgente = (int)$_POST["idAgente"];
	$jointTableStr = "(".Ordine::joinTable.") LEFT JOIN VariazioneArticoloOrdine ON Ordine.ID = VariazioneArticoloOrdine.idOrdine";
	$jointSelectStr = Ordine::joinSelect.", SUM(VariazioneArticoloOrdine.Totale) AS ".TOTALE_ORDINE_FIELD_NAME;
	$whereClause = "idAgente = ".$idAgente." AND idAziendaRappresentata = ".$idAzienda." AND Data > '".Utils::dateToMySqlFormat($dateFrom)."' AND Data < '".Utils::dateToMySqlFormat($dateTo)."' GROUP BY Ordine.ID";
	$res = $db->EnumerateTableStartExt($jointSelectStr, $jointTableStr, "Data DESC", $whereClause);
	while($db->EnumerateTableNext($res))
	{
		$newObjData = $db->EnumerateTableGetValues($res);
		$tempOrdiniList[] = $c->createNew($newObjData);
		$totale += (int)$newObjData[TOTALE_ORDINE_FIELD_NAME];
	}
	$ordiniList = $tempOrdiniList;
	//etichetta descrittiva della statistica effettuata
	$statLabel = "Statistica effettuata per agente e per azienda produttrice:<br/>";
	$agenteInst = Agente::getInstance()->getFromDB($db, $idAgente);
	$aziendaInst = AziendaRappresentata::getInstance()->getFromDB($db, $idAzienda);
	if($agenteInst != NULL)
		$statLabel .= " - Agente: <b>".$agenteInst->getLabel()."</b><br/>";
	if($aziendaInst != NULL)
		$statLabel .= " - Azienda produttrice: <b>".$aziendaInst->getLabel()."</b>";
}

if($ordiniList === NULL)
{
	echo('<p style=\"color:#f00;\"><b>Parametri della richiesta non validi!</b></p>');
	include("Layout/footer.php");
	die();
}

?>

<br/><br/>
<h2 style="font-weight: normal;"><?= $statLabel ?></h2>
<br/><br/>

<div class="top-bar">
<h1>Totale fatturato(IVA esclusa): <span style="color:red;"><?= $totale ?></span></h1>
</div>
<div class="select-bar-void"></div>
<br/>
<div id="ordersList" class="table">
	<table class="listing" cellpadding="0" cellspacing="0">
		<tr>
			<?php
			
			$attribNames = $c->attribNames;
			$attribNames[] = TOTALE_ORDINE_FIELD_NAME;
			$attrinLongNames = $c->attribLongNames;
			$attrinLongNames[TOTALE_ORDINE_FIELD_NAME] = "Totale ordine";
			$attribIsImportant = $c->attribIsImportant;
			$attribIsImportant[TOTALE_ORDINE_FIELD_NAME] = 2;

			foreach($attribNames as $name)
			{
				//vengono mostrati nella lista solo gli attribbuti più importanti
				if(!$attribIsImportant[$name])
					continue;
				echo('<th>'.$attrinLongNames[$name].'</th>');
			}
			echo('<th></th>');

			?>
		</tr>
	   <?php
	   
	   $pageEditLink = $pagesEditLink[SUBJECT_PAGE_NAME];

	   for($i = 0; $i < count($ordiniList); $i++)
	   {
		   $detailsLink = $pageEditLink.'?ID='.($ordiniList[$i]->dataTupla[STD_ID]);
			echo '<tr ondblclick="javascript:document.location.href=\''.$detailsLink.'\';" >';
			foreach($attribNames as $name)
			{
				//vengono mostrati nella lista solo gli attribbuti più importanti
				$imp = $attribIsImportant[$name];
				if(!$imp)
					continue;
				$style = ($imp > 1 ? "class=\"style1\"" : "");
				$tooltip = "";
				if($ordiniList[$i]->isDataLabelCut($name))
				{
					$ordiniList[$i]->cutLongStrings(false);
					//htmlentities($objsList[$i]->getDataLabel($db,$name),ENT_QUOTES|ENT_IGNORE|ENT_HTML5)
					$tooltip = "title=\"".$ordiniList[$i]->getDataLabel($db,$name)."\"";
					$ordiniList[$i]->cutLongStrings(true);
				}
				echo("<td ".$style." ".$tooltip." >".$ordiniList[$i]->getDataLabel($db,$name)."</td>");
			}
			echo('<td><a href="'.$detailsLink.'" ><img src="img/edit-icon.gif" width="16" height="16" title="Dettagli/Modifica" /></a></td>');
			echo "</tr>";
		}
		
		?>
	</table>
</div>

<?php

include("Layout/footer.php");

?>
